[Cakephp3】validationとbuildRulesの違いや使い分けについて
2020年07月20日
Cakephp3のValidationとBuildRulesについての記事です。
Cakephp3ではフォームのバリデーション(エラーチェック)はモデルで行われますが、エラーチェックの方法に、validationと、BuildRulesの2パターンがあります。
この違いについて解説したいと思います。
まずvalidationについてですが、基本的にmodelのvalidationDefaultメソッドの定義していきます。一般的なエラーチェックはこちらに定義していくパターンが多いと思います。
BuildRulesは、validationメソッドとは別に定義していきます。
通常のvalidationとは記述方法が微妙に違うので、そこは公式サイトを見て確認してください。
それで、この2つの何が違うのかについてですが、バリデーションが実行されるタイミングです。
通常のvalidationは、Controller側でnewEntityやpatchEntityを実行するタイミングで行われます。
これに対して、BuildRulesは、モデルからsaveメソッドを実行するタイミングで行われます。
この2つのどう使い分けるかというと微妙なところがあって私も完全には理解してないのですが、例えば日付を比較するようなエラーチェックを入れる場合、Build Rulesのほうに追加すると便利です。
なぜなら、日付を比較するようなエラーチェックの場合、そもそも入力値が日付でなかったりする場合、エラーチェックの処理の途中で日付でないのでエラーになってしまったりして、データが「日付である」という前提を担保することが難しいわけです。
これを、Validationのほうに日付のエラーチェックを定義しておいて、日付データの比較はBuiled Rulesのほうに定義しておけば、日付でない場合はpatchEntityのタイミングでエラーになってsave時のBuild Rulesまで処理が進まないので、内部的な処理で日付がどうこうみたいな処理を書く必要がなくなります。
他にもあるかもしれませんが、私の理解ではそんなところです。